import { defineConfig } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';
// 从 uni_modules 导入 JZ UnoCSS 插件 - 使用ES6导入
import jzUnocss, { 
    core, 
    flex, 
    media, 
    pseudo, 
    border,
    unocss,
    sketch,
    utils
} from './uni_modules/jz-unocss-uvue/index.js';
export default defineConfig({
    plugins: [
        uni(),
        
        // JZ UnoCSS 配置 - uni_modules 版本
        jzUnocss({
            // 预设配置 - 根据项目需求选择
            presets: [
                core(),      // 核心预设 - 基础原子类（必选）
                flex(),      // 弹性盒预设 - 布局相关
                media(),     // 响应式断点预设 - 适配不同屏幕
                pseudo(),    // 伪类预设 - hover、focus等状态
                border(),    // 边框预设 - 边框相关样式
                unocss(),    // 默认预设规则
                sketch(),    // 函数写法预设规则
            ],
            // 类名前缀 - 避免与其他CSS框架冲突
            prefix: ['jz', 'uno'],
            // 排除文件/目录
            exclude: ['node_modules', 'dist'],
            // 排除class类名 - 支持字符串和正则表达式
            excludeClasses: [
                // 字符串精确匹配
                'custom-class',
                'my-special-class',
                // 正则表达式匹配
                /^temp-/,           // 排除以 temp- 开头的类名
                /^debug-/,          // 排除以 debug- 开头的类名
                /^test-\d+$/,       // 排除 test-数字 格式的类名
                // /^old-/,         // 排除以 old- 开头的类名（示例）
            ],
            // 开发模式 'development' 或 'production' - 根据当前运行环境判断
            mode: process.env.NODE_ENV || 'development',
            // 用户必须手动导入 uni_modules/jz-unocss-uvue/main.css 文件
            cssOutputPath: 'uni_modules/jz-unocss-uvue/main.css',
            // 单位设置 - 根据平台自动转换
            unit: 'rpx', // 默认单位
            // 日志配置
            log: true,
            // 是否编译全端代码，默认为true
            // 如果设置为false，则只渲染当前运行环境的代码
            compileAllPlatforms: true,
            // 主题配置
            theme: {
                // 断点配置
                breakpoints: {
                    sm: 640,   // 小屏幕
                    md: 768,   // 中等屏幕
                    lg: 1024,  // 大屏幕
                    xl: 1280,  // 超大屏幕
                },
                // 颜色配置
                colors: {
                    // 基础颜色
                    primary: '#007AFF',
                    secondary: '#5856D6',
                    success: '#4CD964',
                    warning: '#FF9500',
                    danger: '#FF3B30',
                    info: '#5AC8FA',
                }
            },
            
            // 快捷方式
            shortcuts: {
                // 按钮样式
                'btn': 'px-4 py-2 rounded text-center',
                'btn-primary': 'btn bg-primary text-white',
                'btn-secondary': 'btn bg-secondary text-white',
                
                // 卡片样式
                'card': 'bg-white rounded p-4',
                
                // 表单样式
                'input': 'px-3 py-2 border border-gray rounded',
                
                // 布局样式
                'container': 'mx-auto px-4',
                
                // 文本样式
                'text-title': 'text-2xl font-bold text-gray-900',
                'text-body': 'text-base text-gray-600'
            },
            
            // 自定义规则
            rules: [
                // 添加自定义 CSS 规则
                [/^custom-(.+)$/, (match) => {
                    return {
                        'custom-property': match[1]
                    };
                }]
            ],
            h5Unit: 'rem',
            remBase: 16
        })
    ],
    
    // 其他Vite配置
    define: {
        'process.env': {}
    },
    
    // 路径别名
    resolve: {
        alias: {
            '@': '/src'
        }
    },
    
    css: {
        preprocessorOptions: {
            scss: {
                additionalData: '@import "@/uni.scss";'
            }
        }
    },
    
    server: {
        port: 3000,
        open: true,
        // 热更新配置 - 新增
        hmr: {
            overlay: false  // 关闭错误遮罩，避免样式更新被阻塞
        }
    },
    
    // 优化配置 - 新增热更新相关
    optimizeDeps: {
        exclude: ['uni_modules/jz-unocss']  // 排除jz-unocss避免预构建缓存问题
    },
    
    // 构建配置
    build: {
        // 禁用CSS代码分割，确保样式正确加载
        cssCodeSplit: false,
        rollupOptions: {
            // 监听文件变化 - 只监听 uvue 文件
            watch: {
                include: ['**/*.uvue']
            }
        }
    }
}); 